5D - Follow Traffic Rules - CodeForces Solution


implementation math *2100

Please click on ads to support us..

Python Code:

import math

a, v = list(map(int, input().split()))
l, d, w = list(map(int, input().split()))

time_to_reach_max = v / a
length_to_reach_max = (v * v) / (2 * a)
velocity_at_sign = math.sqrt(2 * d * a)

if length_to_reach_max <= d:
  if v <= w:
        print("%.5f" % (time_to_reach_max + ((l - length_to_reach_max) / v)))
  else:
    TIME_BEFORE_SIGN = 0
    velocity_diff = v - w
    time_to_reach_diff = velocity_diff / a
    length_to_peak_velocity_from_sign = ((velocity_diff * velocity_diff) / (2 * a)) + (w * time_to_reach_diff)
    peak_2_from_berland = d - length_to_peak_velocity_from_sign
    if peak_2_from_berland >= length_to_reach_max:
      TIME_BEFORE_SIGN = time_to_reach_diff + time_to_reach_max + ((peak_2_from_berland - length_to_reach_max) / v)
    else:
            time_to_reach_w = w / a
      length_to_reach_w = (w * w) / (2 * a)
      distance_left = d - length_to_reach_w
      time_to_sign = (((-1) * w) + math.sqrt((w ** 2) + (a * distance_left))) / a
      TIME_BEFORE_SIGN = time_to_reach_w + (2 * time_to_sign)
    
    TIME_AFTER_SIGN = 0
    time_to_max = (v - w) / a
    length_to_max = (((v - w) * (v - w)) / (2 * a)) + (w * time_to_max)
    length_rest = l - d
    if length_to_max >= length_rest:
            TIME_AFTER_SIGN = (((-1) * w) + math.sqrt((w ** 2) + (2 * a * length_rest))) / a
    else:
      TIME_AFTER_SIGN = time_to_max + ((length_rest - length_to_max) / v)
    print("%.5f" % (TIME_BEFORE_SIGN + TIME_AFTER_SIGN))
else:
  if velocity_at_sign <= w:
    if length_to_reach_max <= l:
      print("%.5f" % (time_to_reach_max + ((l - length_to_reach_max) / v)))
    else:
      print("%.5f" % (math.sqrt((2 * l) / a)))
  else:
    time_to_reach_w = w / a
    length_to_reach_w = (w * w) / (2 * a)
    distance_left = d - length_to_reach_w
    time_to_sign = (((-1) * w) + math.sqrt((w ** 2) + (a * distance_left))) / a
    TIME_BEFORE_SIGN = time_to_reach_w + (2 * time_to_sign)

    TIME_AFTER_SIGN = 0
    time_to_max = (v - w) / a
    length_to_max = (((v - w) * (v - w)) / (2 * a)) + (w * time_to_max)
    length_rest = l - d
    if length_to_max >= length_rest:
            TIME_AFTER_SIGN = (((-1) * w) + math.sqrt((w ** 2) + (2 * a * length_rest))) / a
    else:
      TIME_AFTER_SIGN = time_to_max + ((length_rest - length_to_max) / v)
    print("%.5f" % (TIME_BEFORE_SIGN + TIME_AFTER_SIGN))


Comments

Submit
0 Comments
More Questions

841. Keys and Rooms
152. Maximum Product Subarray
337. House Robber III
869. Reordered Power of 2
1593C - Save More Mice
1217. Minimum Cost to Move Chips to The Same Position
347. Top K Frequent Elements
1503. Last Moment Before All Ants Fall Out of a Plank
430. Flatten a Multilevel Doubly Linked List
1290. Convert Binary Number in a Linked List to Integer
1525. Number of Good Ways to Split a String
72. Edit Distance
563. Binary Tree Tilt
1306. Jump Game III
236. Lowest Common Ancestor of a Binary Tree
790. Domino and Tromino Tiling
878. Nth Magical Number
2099. Find Subsequence of Length K With the Largest Sum
1608A - Find Array
416. Partition Equal Subset Sum
1446. Consecutive Characters
1618A - Polycarp and Sums of Subsequences
1618B - Missing Bigram
938. Range Sum of BST
147. Insertion Sort List
310. Minimum Height Trees
2110. Number of Smooth Descent Periods of a Stock
2109. Adding Spaces to a String
2108. Find First Palindromic String in the Array
394. Decode String